/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ficha.storyteller.vampiro;

import control.FichaMascara;
import control.Skill;
import ficha.LabelNivel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import model.ManterXML;
import ficha.SkillTableModel;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import utilidades.FileFilter;
import ficha.SkillCellRenderer;
import ficha.SkillTable;

/**
 *
 * @author yurifw
 */
public class FrameFichaMascara extends JFrame {
    //<editor-fold desc="declaração dos componentes" defaultstate="collapsed">

    JPanel contentPane;
    private JTextField txtNome = new JTextField();
    private JTextField txtJogador = new JTextField();
    private JTextField txtCronica = new JTextField();
    private JTextField txtNatureza = new JTextField();
    private JTextField txtComportamento = new JTextField();
    private JTextField txtCla = new JTextField();
    private JTextField txtGeracao = new JTextField();
    private JTextField txtRefugio = new JTextField();
    private JTextField txtConceito = new JTextField();
    private LabelNivel attForca = new AtributoLabel(AreaFicha.ATRIBUTO);
    private LabelNivel attDestreza = new AtributoLabel(AreaFicha.ATRIBUTO);
    private LabelNivel attVigor = new AtributoLabel(AreaFicha.ATRIBUTO);
    private LabelNivel attCarisma = new AtributoLabel(AreaFicha.ATRIBUTO);
    private LabelNivel attManipulacao = new AtributoLabel(AreaFicha.ATRIBUTO);
    private LabelNivel attAparencia = new AtributoLabel(AreaFicha.ATRIBUTO);
    private LabelNivel attPercepcao = new AtributoLabel(AreaFicha.ATRIBUTO);
    private LabelNivel attInteligencia = new AtributoLabel(AreaFicha.ATRIBUTO);
    private LabelNivel attRaciocinio = new AtributoLabel(AreaFicha.ATRIBUTO);
    private LabelNivel imgNivelProntidao = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelEsportes = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelBriga = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelEsquiva = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelEmpatia = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelExpressao = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelIntimidacao = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelLideranca = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelManha = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelLabia = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelEmpatiaAnimais = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelOficios = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelConducao = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelEtiqueta = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelArmaFogo = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelArmaBranca = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelPerformance = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelSeguranca = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelFurtividade = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelSobrevivencia = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelAcademicos = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelComputador = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelFinancas = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelInvestigacao = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelDireito = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelLinguistica = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelMedicina = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelOcultismo = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelPolitica = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelCiencia = new HabilidadeLabel(AreaFicha.HABILIDADE);
    private LabelNivel imgNivelConsciencia = new AtributoLabel(AreaFicha.VIRTUDE);
    private LabelNivel imgNivelAutocontrole = new AtributoLabel(AreaFicha.VIRTUDE);
    private LabelNivel imgNivelCoragem = new AtributoLabel(AreaFicha.VIRTUDE);
    private JRadioButton radioConsciencia = new JRadioButton();
    private JRadioButton radioConviccao = new JRadioButton();
    private JRadioButton radioAutocontrole = new JRadioButton();
    private JRadioButton radioInstintos = new JRadioButton();
    private SkillTable disciplinas = new SkillTable(AreaFicha.DISCIPLINA_CLA);
    private SkillTable antecedentes = new SkillTable(null);
    private JTable tableQualidades = new JTable();
    private JButton btnAddQualidade = new JButton(new ImageIcon(getClass().getResource("/ficha/imagens/icon-add.png")));
    private JButton btnRemoveQualidade = new JButton(new ImageIcon(getClass().getResource("/ficha/imagens/icon-cross.png")));
    private JTextField txtTrilha = new JTextField();
    private LabelNivel imgNivelHumanidade = new VantagensLabel(AreaFicha.HUMANIDADE);
    private LabelNivel imgNivelForcaVontade = new VantagensLabel(AreaFicha.HUMANIDADE);
    private JButton btoSalvar = new JButton(new ImageIcon(getClass().getResource("/ficha/imagens/icon-save.png")));
    private JButton btoLoad = new JButton(new ImageIcon(getClass().getResource("/ficha/imagens/icon-import.png")));
    private JToggleButton btoEspecialidade = new JToggleButton("Editar Especialidades");
    //</editor-fold>

    public FrameFichaMascara() {
        contentPane = new Fundo();
        contentPane.setLayout(null);

        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension d = kit.getScreenSize();
        contentPane.setPreferredSize(new Dimension(1000, 1400));
        JScrollPane scroll = new JScrollPane(contentPane);
        this.add(scroll);
        this.setBounds(0, 0, 1050, (int) d.getHeight() - 30);

        createHeader();
        criaAtributo();
        criaConhecimentos();
        criaPericias();
        criaTalentos();
        criaVantagens();
        criaOutros();

        addListeners();

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void setTitle() {
        setTitle(txtJogador.getText() + " - " + txtNome.getText());
    }

    private void addListeners() {
        btoSalvar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                ManterXML manterXML = new ManterXML();
                FichaMascara ficha = new FichaMascara();
                ficha.setNome(txtNome.getText());
                ficha.setJogador(txtJogador.getText());
                ficha.setCronica(txtCronica.getText());
                ficha.setNatureza(txtNatureza.getText());
                ficha.setComportamento(txtComportamento.getText());
                ficha.setCla(txtCla.getText());
                ficha.setGeracao(Integer.parseInt(txtGeracao.getText()));
                ficha.setRefugio(txtRefugio.getText());
                ficha.setConceito(txtConceito.getText());
                ficha.setForca(attForca.getNivel());
                ficha.setVigor(attVigor.getNivel());
                ficha.setDestreza(attDestreza.getNivel());
                ficha.setCarisma(attCarisma.getNivel());
                ficha.setManipulacao(attManipulacao.getNivel());
                ficha.setAparencia(attAparencia.getNivel());
                ficha.setPercepcao(attPercepcao.getNivel());
                ficha.setInteligencia(attInteligencia.getNivel());
                ficha.setRaciocinio(attRaciocinio.getNivel());
                ficha.setProntidao(imgNivelProntidao.getNivel());
                ficha.setEsportes(imgNivelEsportes.getNivel());
                ficha.setBriga(imgNivelBriga.getNivel());
                ficha.setEsquiva(imgNivelEsquiva.getNivel());
                ficha.setEmpatia(imgNivelEmpatia.getNivel());
                ficha.setExpressao(imgNivelExpressao.getNivel());
                ficha.setIntimidacao(imgNivelIntimidacao.getNivel());
                ficha.setLideranca(imgNivelLideranca.getNivel());
                ficha.setManha(imgNivelManha.getNivel());
                ficha.setLabia(imgNivelLabia.getNivel());
                ficha.setEmpatiaAnimais(imgNivelEmpatiaAnimais.getNivel());
                ficha.setOficios(imgNivelOficios.getNivel());
                ficha.setConducao(imgNivelConducao.getNivel());
                ficha.setEtiqueta(imgNivelEtiqueta.getNivel());
                ficha.setArmasFogo(imgNivelArmaFogo.getNivel());
                ficha.setArmasBrancas(imgNivelArmaBranca.getNivel());
                ficha.setPerformance(imgNivelPerformance.getNivel());
                ficha.setSegurnaca(imgNivelSeguranca.getNivel());
                ficha.setFurtividade(imgNivelFurtividade.getNivel());
                ficha.setSobrevivencia(imgNivelSobrevivencia.getNivel());
                ficha.setAcademico(imgNivelAcademicos.getNivel());
                ficha.setComputador(imgNivelComputador.getNivel());
                ficha.setFinancas(imgNivelFinancas.getNivel());
                ficha.setInvestigacao(imgNivelInvestigacao.getNivel());
                ficha.setDireito(imgNivelDireito.getNivel());
                ficha.setLinguistica(imgNivelLinguistica.getNivel());
                ficha.setMedicina(imgNivelMedicina.getNivel());
                ficha.setOcultismo(imgNivelOcultismo.getNivel());
                ficha.setPolitica(imgNivelPolitica.getNivel());
                ficha.setCiencia(imgNivelCiencia.getNivel());
                ficha.setConsciencia(imgNivelConsciencia.getNivel());
                ficha.setAutocontrole(imgNivelAutocontrole.getNivel());
                ficha.setCoragem(imgNivelCoragem.getNivel());
                ficha.setHumanidade(imgNivelHumanidade.getNivel());
                ficha.setForcaDeVontade(imgNivelForcaVontade.getNivel());

                List<Skill> listaAntecedentes = antecedentes.getSkills();
                ficha.setAntecedentes(listaAntecedentes);
                ficha.setDisciplinas(disciplinas.getSkills());

                List<Skill> listaQualidades = new ArrayList<Skill>();
                for (int i = 0; i < tableQualidades.getRowCount(); i++) {
                    Skill a = new Skill();
                    a.setNome(tableQualidades.getModel().getValueAt(i, 0) + "");
                    a.setNivel(Integer.parseInt(tableQualidades.getModel().getValueAt(i, 1).toString()));
                    listaQualidades.add(a);
                }
                ficha.setQualidadesDefeitos(listaQualidades);
                ficha.setConsciencia(imgNivelConsciencia.getNivel());
                ficha.setAutocontrole(imgNivelAutocontrole.getNivel());
                ficha.setCoragem(imgNivelCoragem.getNivel());
                ficha.setHumanidade(imgNivelHumanidade.getNivel());
                ficha.setTrilha(txtTrilha.getText());
                ficha.setForcaDeVontade(imgNivelForcaVontade.getNivel());


                ficha.setEspecForca(attForca.getToolTipText());
                ficha.setEspecDestreza(attDestreza.getToolTipText());
                ficha.setEspecVigor(attVigor.getToolTipText());
                ficha.setEspecAparencia(attAparencia.getToolTipText());
                ficha.setEspecCarisma(attCarisma.getToolTipText());
                ficha.setEspecManipulacao(attManipulacao.getToolTipText());
                ficha.setEspecInteligencia(attInteligencia.getToolTipText());
                ficha.setEspecRaciocinio(attRaciocinio.getToolTipText());
                ficha.setEspecPercepcao(attPercepcao.getToolTipText());
                ficha.setEspecProntidao(imgNivelProntidao.getToolTipText());
                ficha.setEspecEsportes(imgNivelEsportes.getToolTipText());
                ficha.setEspecBriga(imgNivelBriga.getToolTipText());
                ficha.setEspecEsquiva(imgNivelEsquiva.getToolTipText());
                ficha.setEspecEmpatia(imgNivelEmpatia.getToolTipText());
                ficha.setEspecExpressao(imgNivelExpressao.getToolTipText());
                ficha.setEspecIntimidacao(imgNivelIntimidacao.getToolTipText());
                ficha.setEspecLideranca(imgNivelLideranca.getToolTipText());
                ficha.setEspecManha(imgNivelManha.getToolTipText());
                ficha.setEspecLabia(imgNivelLabia.getToolTipText());
                ficha.setEspecEmpatiaAnimais(imgNivelEmpatiaAnimais.getToolTipText());
                ficha.setEspecOficios(imgNivelOficios.getToolTipText());
                ficha.setEspecConducao(imgNivelConducao.getToolTipText());
                ficha.setEspecEtiqueta(imgNivelEtiqueta.getToolTipText());
                ficha.setEspecArmasFogo(imgNivelArmaFogo.getToolTipText());
                ficha.setEspecArmasBrancas(imgNivelArmaBranca.getToolTipText());
                ficha.setEspecPerformance(imgNivelPerformance.getToolTipText());
                ficha.setEspecSeguranca(imgNivelSeguranca.getToolTipText());
                ficha.setEspecFurtividade(imgNivelFurtividade.getToolTipText());
                ficha.setEspecSobrevivencia(imgNivelSobrevivencia.getToolTipText());
                ficha.setEspecAcademico(imgNivelAcademicos.getToolTipText());
                ficha.setEspecComputador(imgNivelComputador.getToolTipText());
                ficha.setEspecFinancas(imgNivelFinancas.getToolTipText());
                ficha.setEspecInvestigacao(imgNivelInvestigacao.getToolTipText());
                ficha.setEspecDireito(imgNivelDireito.getToolTipText());
                ficha.setEspecLinguistica(imgNivelLinguistica.getToolTipText());
                ficha.setEspecMedicina(imgNivelMedicina.getToolTipText());
                ficha.setEspecOcultismo(imgNivelOcultismo.getToolTipText());
                ficha.setEspecPolitica(imgNivelPolitica.getToolTipText());
                ficha.setEspecCiencia(imgNivelCiencia.getToolTipText());

                //escolhendo o diretorio onde será salvo e o nome do arquivo
                JFileChooser fileChooser = new JFileChooser();
                String caminho = "";
                int opcao = fileChooser.showSaveDialog(null);
                fileChooser.setDialogTitle("Salvar Ficha");
                String currentDirectory = fileChooser.getCurrentDirectory().getPath();
                String nomeArquivo = fileChooser.getSelectedFile().getName();
                if (opcao == 0) {
                    try {
                        caminho = currentDirectory + System.getProperty("file.separator") + nomeArquivo;
                    } catch (NullPointerException npe) {
                        JOptionPane.showMessageDialog(fileChooser, "Erro!", npe.getMessage(), JOptionPane.ERROR_MESSAGE);
                    }
                    if (caminho.indexOf(".vamp") == -1) {
                        caminho = caminho + ".vamp";
                    }
                    manterXML.salvarFicha(ficha, caminho);
                }
            }
        });

        btoLoad.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {

                    JFileChooser chooser = new JFileChooser();
                    chooser.setDialogTitle("Abrir Ficha");
                    chooser.setFileFilter(new FileFilter());
                    int escolha = chooser.showOpenDialog(null);

                    if (escolha == 0) {
                        File currentDirectory = chooser.getCurrentDirectory();
                        File selectedFile = chooser.getSelectedFile();

                        String caminho = currentDirectory.getPath() + System.getProperty("file.separator") + selectedFile.getName();


                        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
                        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
                        Document doc = docBuilder.parse(caminho); //colocar String com URI do araquivo como parametro do parse
                        ManterXML manterXML = new ManterXML();
                        FichaMascara ficha = manterXML.lerFicha(doc);

                        txtNome.setText(ficha.getNome());
                        txtJogador.setText(ficha.getJogador());
                        txtCronica.setText(ficha.getCronica());
                        txtNatureza.setText(ficha.getNatureza());
                        txtComportamento.setText(ficha.getComportamento());
                        txtCla.setText(ficha.getCla());
                        txtGeracao.setText(ficha.getGeracao() + "");
                        txtRefugio.setText(ficha.getRefugio());
                        txtConceito.setText(ficha.getConceito());

                        attForca.setNivel(ficha.getForca());
                        attForca.setToolTipText(ficha.getEspecForca());
                        attDestreza.setNivel(ficha.getDestreza());
                        attDestreza.setToolTipText(ficha.getEspecDestreza());
                        attVigor.setNivel(ficha.getVigor());
                        attVigor.setToolTipText(ficha.getEspecVigor());
                        attCarisma.setNivel(ficha.getCarisma());
                        attCarisma.setToolTipText(ficha.getEspecCarisma());
                        attManipulacao.setNivel(ficha.getManipulacao());
                        attManipulacao.setToolTipText(ficha.getEspecManipulacao());
                        attAparencia.setNivel(ficha.getAparencia());
                        attAparencia.setToolTipText(ficha.getEspecAparencia());
                        attPercepcao.setNivel(ficha.getPercepcao());
                        attPercepcao.setToolTipText(ficha.getEspecPercepcao());
                        attInteligencia.setNivel(ficha.getInteligencia());
                        attInteligencia.setToolTipText(ficha.getEspecInteligencia());
                        attRaciocinio.setNivel(ficha.getRaciocinio());
                        attRaciocinio.setToolTipText(ficha.getEspecRaciocinio());

                        imgNivelProntidao.setNivel(ficha.getProntidao());
                        imgNivelProntidao.setToolTipText(ficha.getEspecProntidao());
                        imgNivelEsportes.setNivel(ficha.getEsportes());
                        imgNivelEsportes.setToolTipText(ficha.getEspecEsportes());
                        imgNivelBriga.setNivel(ficha.getBriga());
                        imgNivelBriga.setToolTipText(ficha.getEspecBriga());
                        imgNivelEsquiva.setNivel(ficha.getEsquiva());
                        imgNivelEsquiva.setToolTipText(ficha.getEspecEsquiva());
                        imgNivelEmpatia.setNivel(ficha.getEmpatia());
                        imgNivelEmpatia.setToolTipText(ficha.getEspecEmpatia());
                        imgNivelExpressao.setNivel(ficha.getExpressao());
                        imgNivelExpressao.setToolTipText(ficha.getEspecExpressao());
                        imgNivelIntimidacao.setNivel(ficha.getIntimidacao());
                        imgNivelIntimidacao.setToolTipText(ficha.getEspecIntimidacao());
                        imgNivelLideranca.setNivel(ficha.getLideranca());
                        imgNivelLideranca.setToolTipText(ficha.getEspecLideranca());
                        imgNivelManha.setNivel(ficha.getManha());
                        imgNivelManha.setToolTipText(ficha.getEspecManha());
                        imgNivelLabia.setNivel(ficha.getLabia());
                        imgNivelLabia.setToolTipText(ficha.getEspecLabia());

                        imgNivelEmpatiaAnimais.setNivel(ficha.getEmpatiaAnimais());
                        imgNivelEmpatiaAnimais.setToolTipText(ficha.getEspecEmpatiaAnimais());
                        imgNivelOficios.setNivel(ficha.getOficios());
                        imgNivelOficios.setToolTipText(ficha.getEspecOficios());
                        imgNivelConducao.setNivel(ficha.getConducao());
                        imgNivelConducao.setToolTipText(ficha.getEspecConducao());
                        imgNivelEtiqueta.setNivel(ficha.getEtiqueta());
                        imgNivelEtiqueta.setToolTipText(ficha.getEspecEtiqueta());
                        imgNivelArmaFogo.setNivel(ficha.getArmasFogo());
                        imgNivelArmaFogo.setToolTipText(ficha.getEspecArmasFogo());
                        imgNivelArmaBranca.setNivel(ficha.getArmasBrancas());
                        imgNivelArmaBranca.setToolTipText(ficha.getEspecArmasBrancas());
                        imgNivelPerformance.setNivel(ficha.getPerformance());
                        imgNivelPerformance.setToolTipText(ficha.getEspecPerformance());
                        imgNivelSeguranca.setNivel(ficha.getSegurnaca());
                        imgNivelSeguranca.setToolTipText(ficha.getEspecSeguranca());
                        imgNivelFurtividade.setNivel(ficha.getFurtividade());
                        imgNivelFurtividade.setToolTipText(ficha.getEspecFurtividade());
                        imgNivelSobrevivencia.setNivel(ficha.getSobrevivencia());
                        imgNivelSobrevivencia.setToolTipText(ficha.getEspecSobrevivencia());

                        imgNivelAcademicos.setNivel(ficha.getAcademico());
                        imgNivelAcademicos.setToolTipText(ficha.getEspecAcademico());
                        imgNivelComputador.setNivel(ficha.getComputador());
                        imgNivelComputador.setToolTipText(ficha.getEspecComputador());
                        imgNivelFinancas.setNivel(ficha.getFinancas());
                        imgNivelFinancas.setToolTipText(ficha.getEspecFinancas());
                        imgNivelInvestigacao.setNivel(ficha.getInvestigacao());
                        imgNivelInvestigacao.setToolTipText(ficha.getEspecInvestigacao());
                        imgNivelDireito.setNivel(ficha.getDireito());
                        imgNivelDireito.setToolTipText(ficha.getEspecDireito());
                        imgNivelLinguistica.setNivel(ficha.getLinguistica());
                        imgNivelLinguistica.setToolTipText(ficha.getEspecLinguistica());
                        imgNivelMedicina.setNivel(ficha.getMedicina());
                        imgNivelMedicina.setToolTipText(ficha.getEspecMedicina());
                        imgNivelOcultismo.setNivel(ficha.getOcultismo());
                        imgNivelOcultismo.setToolTipText(ficha.getEspecOcultismo());
                        imgNivelPolitica.setNivel(ficha.getPolitica());
                        imgNivelPolitica.setToolTipText(ficha.getEspecPolitica());
                        imgNivelCiencia.setNivel(ficha.getCiencia());
                        imgNivelCiencia.setToolTipText(ficha.getEspecCiencia());

                        antecedentes.limpar();
                        for (int i = 0; i < ficha.getAntecedentes().size(); i++) {
                            antecedentes.inserir(ficha.getAntecedentes().get(i));
                        }

                        disciplinas.limpar();
                        for (int i = 0; i < ficha.getDisciplinas().size(); i++) {
                            disciplinas.inserir(ficha.getDisciplinas().get(i));
                        }

                        imgNivelAutocontrole.setNivel(ficha.getAutocontrole());
                        imgNivelCoragem.setNivel(ficha.getCoragem());
                        imgNivelConsciencia.setNivel(ficha.getConsciencia());

                        ((SkillTableModel) tableQualidades.getModel()).limpar();
                        for (int i = 0; i < ficha.getQualidadesDefeitos().size(); i++) {
                            ((SkillTableModel) tableQualidades.getModel()).inserir(ficha.getQualidadesDefeitos().get(i));
                        }

                        imgNivelHumanidade.setNivel(ficha.getHumanidade());
                        txtTrilha.setText(ficha.getTrilha());
                        imgNivelForcaVontade.setNivel(ficha.getForcaDeVontade());
                    }
                    setTitle();

                } catch (ParserConfigurationException ex) {
                    JOptionPane.showMessageDialog(null, ex.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
                } catch (SAXException ex) {
                    JOptionPane.showMessageDialog(null, ex.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
                } catch (IOException ex) {
                    JOptionPane.showMessageDialog(null, ex.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
                }
            }
        });
        btnAddQualidade.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                ((SkillTableModel)tableQualidades.getModel()).inserir();
            }
        });
        btnRemoveQualidade.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                ((SkillTableModel)tableQualidades.getModel()).excluir(tableQualidades.getSelectedRows());
            }
        });
    }

    //<editor-fold desc="Criação UI" defaultstate="collapsed">
    private void createHeader() {
        txtCla.setBorder(null);
        txtComportamento.setBorder(null);
        txtConceito.setBorder(null);
        txtCronica.setBorder(null);
        txtGeracao.setBorder(null);
        txtJogador.setBorder(null);
        txtNatureza.setBorder(null);
        txtNome.setBorder(null);
        txtRefugio.setBorder(null);


        txtNome.setBounds(140, 222, 225, 27);
        txtJogador.setBounds(165, 252, 200, 27);
        txtCronica.setBounds(165, 282, 200, 27);
        txtNatureza.setBounds(510, 222, 200, 27);
        txtComportamento.setBounds(580, 252, 130, 27);
        txtCla.setBounds(450, 282, 260, 27);
        txtGeracao.setBounds(830, 222, 170, 27);
        txtRefugio.setBounds(820, 252, 180, 27);
        txtConceito.setBounds(830, 282, 170, 27);

        contentPane.add(txtNome);
        contentPane.add(txtJogador);
        contentPane.add(txtCla);
        contentPane.add(txtComportamento);
        contentPane.add(txtConceito);
        contentPane.add(txtCronica);
        contentPane.add(txtGeracao);
        contentPane.add(txtNatureza);
        contentPane.add(txtRefugio);
    }

    private void criaAtributo() {
        attForca.setBounds(230, 385, 155, 27);
        attDestreza.setBounds(230, 410, 155, 27);
        attVigor.setBounds(230, 435, 155, 27);
        attCarisma.setBounds(560, 385, 155, 27);
        attManipulacao.setBounds(560, 410, 155, 27);
        attAparencia.setBounds(560, 435, 155, 27);
        attPercepcao.setBounds(860, 385, 155, 27);
        attInteligencia.setBounds(860, 410, 155, 27);
        attRaciocinio.setBounds(860, 435, 155, 27);


        contentPane.add(attForca);
        contentPane.add(attDestreza);
        contentPane.add(attVigor);
        contentPane.add(attAparencia);
        contentPane.add(attManipulacao);
        contentPane.add(attCarisma);
        contentPane.add(attInteligencia);
        contentPane.add(attRaciocinio);
        contentPane.add(attPercepcao);
    }

    private void criaTalentos() {
        imgNivelProntidao.setBounds(230, 540, 155, 27);
        imgNivelEsportes.setBounds(230, 565, 155, 27);
        imgNivelBriga.setBounds(230, 591, 155, 27);
        imgNivelEsquiva.setBounds(230, 616, 155, 27);
        imgNivelEmpatia.setBounds(230, 641, 155, 27);
        imgNivelExpressao.setBounds(230, 666, 155, 27);
        imgNivelIntimidacao.setBounds(230, 692, 155, 27);
        imgNivelLideranca.setBounds(230, 692 + 26, 155, 27);
        imgNivelManha.setBounds(230, 692 + 52, 155, 27);
        imgNivelLabia.setBounds(230, 692 + 78, 155, 27);


        contentPane.add(imgNivelBriga);
        contentPane.add(imgNivelEmpatia);
        contentPane.add(imgNivelEsportes);
        contentPane.add(imgNivelEsquiva);
        contentPane.add(imgNivelExpressao);
        contentPane.add(imgNivelIntimidacao);
        contentPane.add(imgNivelLabia);
        contentPane.add(imgNivelLideranca);
        contentPane.add(imgNivelManha);
        contentPane.add(imgNivelProntidao);

    }

    private void criaPericias() {
        imgNivelEmpatiaAnimais.setBounds(560, 540, 155, 27);
        imgNivelOficios.setBounds(560, 565, 155, 27);
        imgNivelConducao.setBounds(560, 591, 155, 27);
        imgNivelEtiqueta.setBounds(560, 616, 155, 27);
        imgNivelArmaFogo.setBounds(560, 641, 155, 27);
        imgNivelArmaBranca.setBounds(560, 666, 155, 27);
        imgNivelPerformance.setBounds(560, 692, 155, 27);
        imgNivelSeguranca.setBounds(560, 692 + 26, 155, 27);
        imgNivelFurtividade.setBounds(560, 692 + 52, 155, 27);
        imgNivelSobrevivencia.setBounds(560, 692 + 78, 155, 27);


        contentPane.add(imgNivelEmpatiaAnimais);
        contentPane.add(imgNivelOficios);
        contentPane.add(imgNivelConducao);
        contentPane.add(imgNivelEtiqueta);
        contentPane.add(imgNivelArmaFogo);
        contentPane.add(imgNivelArmaBranca);
        contentPane.add(imgNivelPerformance);
        contentPane.add(imgNivelSeguranca);
        contentPane.add(imgNivelFurtividade);
        contentPane.add(imgNivelSobrevivencia);


    }

    private void criaConhecimentos() {
        imgNivelAcademicos.setBounds(860, 540, 155, 27);
        imgNivelComputador.setBounds(860, 565, 155, 27);
        imgNivelFinancas.setBounds(860, 591, 155, 27);
        imgNivelInvestigacao.setBounds(860, 616, 155, 27);
        imgNivelDireito.setBounds(860, 642, 155, 27);
        imgNivelLinguistica.setBounds(860, 668, 155, 27);
        imgNivelMedicina.setBounds(860, 694, 155, 27);
        imgNivelOcultismo.setBounds(860, 720, 155, 27);
        imgNivelPolitica.setBounds(860, 746, 155, 27);
        imgNivelCiencia.setBounds(860, 772, 155, 27);


        contentPane.add(imgNivelAcademicos);
        contentPane.add(imgNivelComputador);
        contentPane.add(imgNivelFinancas);
        contentPane.add(imgNivelInvestigacao);
        contentPane.add(imgNivelDireito);
        contentPane.add(imgNivelLinguistica);
        contentPane.add(imgNivelMedicina);
        contentPane.add(imgNivelOcultismo);
        contentPane.add(imgNivelPolitica);
        contentPane.add(imgNivelCiencia);
    }

    private void criaVantagens() {
        imgNivelConsciencia.setBounds(860, 881, 155, 27);
        imgNivelAutocontrole.setBounds(860, 957, 155, 27);
        imgNivelCoragem.setBounds(860, 1034, 155, 27);

        
        disciplinas.setBounds(390, 880, 305, 180);
        antecedentes.setBounds(70, 880, 305, 180);
        

        radioConsciencia.setSelected(true);
        radioConsciencia.setBounds(695, 880, 20, 20);
        radioConsciencia.setBackground(Color.WHITE);
        radioConviccao.setBounds(695, 906, 20, 20);
        radioConviccao.setBackground(Color.WHITE);
        radioAutocontrole.setSelected(true);
        radioAutocontrole.setBounds(695, 955, 20, 20);
        radioAutocontrole.setBackground(Color.WHITE);
        radioInstintos.setBounds(695, 980, 20, 20);
        radioInstintos.setBackground(Color.WHITE);
        ButtonGroup grupo1 = new ButtonGroup();
        grupo1.add(radioConviccao);
        grupo1.add(radioConsciencia);
        ButtonGroup grupo2 = new ButtonGroup();
        grupo2.add(radioAutocontrole);
        grupo2.add(radioInstintos);

        btoSalvar.setBounds(0, 0, 50, 50);
        btoLoad.setBounds(52, 0, 50, 50);
        btoLoad.setBorder(null);
        btoLoad.setBackground(Color.WHITE);
        btoEspecialidade.setBounds(102, 0, 170, 27);

        contentPane.add(imgNivelConsciencia);
        contentPane.add(imgNivelAutocontrole);
        contentPane.add(imgNivelCoragem);
        contentPane.add(disciplinas);
        contentPane.add(antecedentes);

        contentPane.add(radioAutocontrole);
        contentPane.add(radioConsciencia);
        contentPane.add(radioConviccao);
        contentPane.add(radioInstintos);

        contentPane.add(btoSalvar);
        contentPane.add(btoLoad);
        contentPane.add(btoEspecialidade);
    }

    private void criaOutros() {
        tableQualidades.setModel(new SkillTableModel());
        JScrollPane scrollPane = new JScrollPane(tableQualidades);
        scrollPane.setBounds(70, 1130, 300, 200);
        btnAddQualidade.setBounds(70, 1333, 30, 30);
        btnRemoveQualidade.setBounds(338, 1333, 30, 30);

        txtTrilha.setBounds(393, 1119, 290, 27);
        txtTrilha.setBorder(null);
        imgNivelHumanidade.setBounds(393, 1155, 295, 27);

        imgNivelForcaVontade.setBounds(390, 1215, 295, 27);
        contentPane.add(scrollPane);
        contentPane.add(btnAddQualidade);
        contentPane.add(btnRemoveQualidade);
        contentPane.add(txtTrilha);
        contentPane.add(imgNivelHumanidade);
        contentPane.add(imgNivelForcaVontade);
    }
    //</editor-fold>

    private class Fundo extends JPanel {

        protected void paintComponent(final Graphics g) {
            super.paintComponent(g);
            ImageIcon i = new ImageIcon(getClass().getResource("/ficha/imagens/FichaMascara.png"));
            Image imagem = i.getImage();
            g.drawImage(imagem, 0, 0, this);

        }
    }
}
